package com.example.a0506below.util;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;

import androidx.appcompat.widget.AppCompatImageView;

public  class CircleImage extends AppCompatImageView {

   private int radius;

   public CircleImage(Context context) {
       super( context );
   }

   public CircleImage(Context context, AttributeSet attrs) {
       super( context, attrs );
   }

   public CircleImage(Context context, AttributeSet attrs, int defStyleAttr) {
       super( context, attrs, defStyleAttr );
   }
   /**
    * 一般情况下，重写onMeasure，是为了规定自定义view的尺寸
    * 如果你自定义的view的尺寸与父容器的尺寸一致，就不需要重写此方法
    *
    * widthMeasureSpec     heightMeasureSpec
    */

   protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){
       super.onMeasure( widthMeasureSpec,heightMeasureSpec );
       //获取父控件的宽高，取两者的较小值作为圆的直径
       int size = Math.min( getMeasuredWidth(),getMeasuredHeight() );
       radius = size/2;
       //设置自定义控件的尺寸（ 宽   高)
       setMeasuredDimension( size,size );
   }
   protected void onDraw(Canvas canvas){
       //获取画笔
       Paint paint = new Paint(  );
       //获取位图对象
       Drawable drawable = getDrawable();//获取图片
       Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap();
       /**
        * 着色器
        * bitmap：我们亚奥进行着色的位图
        * titleX：在X轴方向的平铺模式
        * titleY：在Y轴方向的平铺模式
        *
        * Shader.TileMode.CLAMP：如果着色器超出原始边界范围，会赋值边缘颜色
        * Shader.TileMode.MIRROR：图像不停的翻转平铺，直到平铺完毕
        * Shader.TileMode.REPEAT：横向和纵向的重复着色器的图像
        *
        * 一般来说，当canvas的宽度（高度）小于BitmapShader中bitmapShader的宽度（高度）
        * 我们使用Shader.TileMode.CLAMP，否则使用其他两个
        */
       BitmapShader bitmapShader = new BitmapShader( bitmap,Shader.TileMode.MIRROR,Shader.TileMode.CLAMP );

       //计算缩放比例   如果相框10*10  而 图片 50*50
       //2.0f     精度问题
       float scale = (radius*2.0f)/Math.min( bitmap.getHeight(),bitmap.getWidth() );
       //Matrix  一个矩阵 最根本的作用它就是  转换坐标
       Matrix matrix = new Matrix(  );
       //设置matrix的缩放比例
       matrix.setScale( scale,scale );
       bitmapShader.setLocalMatrix( matrix );
       //给画笔设置着色器
       paint.setShader( bitmapShader );
       //画圆
       canvas.drawCircle( getWidth()/2,getHeight()/2,radius,paint );

       Paint paint2=new Paint();
       paint2.setColor(Color.parseColor("#456877"));
       paint2.setStyle(Paint.Style.STROKE);
       paint2.setStrokeWidth(5);
       //绘制圆形，圆心的横坐标，圆心的纵坐标,半径，画笔
       canvas.drawCircle( getWidth()/2,getHeight()/2,getWidth()/2,paint2);
   }
}
